#include "getconf.h"
/*!
 *@note 去掉字符串两边的空格字符
 *@param src  [I] 要去掉空格符号的字符串指针
 *@return 返回去掉空格符号的字符串的首地址
 */
static char * trim(char * src)
{
    if(NULL == src) 
		return NULL;

    int i = 0;
    char *begin = src;
    while(src[i] != '\0') {
           if(src[i] != ' ') {
               break;
           }
		   else {
               begin++;
           }
           i++;
     }
     for(i = strlen(src)-1; i >= 0;  i--) {
         if(src[i] != ' ') {
             break;
         }
		 else {
             src[i] = '\0';
         }
    }
	if(src != begin)
		strcpy(src,begin);
    return src;
}
/*!  *@note  以字符串的形式返回某个关键字对应的值 *@param filename [I] 要读取的配置文件名
 *@param keyname  [I] 要读取的关键字
 *@param outname  [O] 返回得到的值
 *@return 成功返回0 否则返回非0
*/
int get_string(const char *filename,char *keyname, char *outname)
{
    if(NULL == filename||NULL == keyname ||NULL == outname)
	{
     	return 1;
	}
    FILE *pFile;
    pFile=fopen(filename,"r");
    if(pFile==NULL) {
        printf("No such file! \n");
        return 2;
    }

    char tempStr[220];
	char strFlag[50];
    while(fgets(tempStr,200,pFile)!=NULL) {
        tempStr[strlen(tempStr)-1] = '\0';//将'\n'换为‘\0'
		trim(tempStr);
        if(tempStr[0] == '#')//注释
            continue;
        char *p =tempStr;
        while(*p&&*p!='=') {//找到 =
             p++;
        }//while
        memset(strFlag,'\0',50);
        memcpy(strFlag,tempStr,p-tempStr);
		trim(strFlag);
        if(!strcmp(strFlag,keyname)) {
			strcpy(outname,p+1);	
			trim(outname);
			fclose(pFile);
			return 0;
        }
	}

   	fclose(pFile);
   return 1;
}


/*!
 *@note  以字符串的形式返回某个关键字对应的值
 *@param filename [I] 要读取的配置文件名
 *@param keyname  [I] 要读取的关键字
 *@param value  [O] 返回得到的值
 *@return 成功返回0 ，否则返回非0
 */
int get_integer(const char *filename,char *keyname,int *value)
{
	char outvalue[50];
	if(0 != get_string(filename,keyname,outvalue)) 
	{
		return 1;
	}

	*value = atoi(outvalue);
	return 0;
}


/*!
 *@note  以字符串的形式返回某个关键字对应的值
 *@param filename [I] 要读取的配置文件名
 *@param keyname  [I] 要读取的关键字
 *@param value  [O] 返回得到的值
 *@return 成功返回0 ，否则返回非0
 */
int get_double(const char *filename,char *keyname,double *value)
{
	char outvalue[50];
	if(0 != get_string(filename,keyname,outvalue)) 
		return 1;

	*value = atof(outvalue);
	return 0;
}

unsigned short
get_proxy_port()
{
	int port ;
	if( 0 != get_integer(CONF_FILE,"proxy_port",&port))
	{
		return 53;
	}
	else 
	{
		return port;
	}
}

unsigned short
get_bind_port()
{
	int port;
	if( 0 != get_integer(CONF_FILE,"bind_port",&port))
	{
		return 4053;
	}
	else 
	{
		return port;
	}
}
unsigned short
get_redis_port()
{
	int port;
	if(0 !=	get_integer(CONF_FILE,"redis_port",&port))
	{
		return 6379;
	}
	else
	{
		return port;
	}
}

void
get_bind_server(char *server_ip)
{
	if(0 != get_string(CONF_FILE ,"bind_server",server_ip))
	{
		strcpy(server_ip,"127.0.0.1");
	}
}
void 
get_redis_server(char *server_ip)
{
	if(0 != get_string(CONF_FILE, "redis_server",server_ip))
	{
		strcpy(server_ip,"127.0.0.1");
	}
}
unsigned short 
get_is_log()
{
	int is_log ;
	if (0 != get_integer(CONF_FILE,"is_log",&is_log))
	{
		return 0;
	}
	else
	{
		return is_log;
	}
}
